package entidades;

import java.util.ArrayList;

/**
 * Implementação de uma lista sincronizada.
 */
public class ListaSincronizada {
    private ArrayList<Object> lista = new ArrayList<Object>();
    
    /**
     * Limpa a lista.
     */
    public synchronized void limpar(){
        lista.clear();
    }
    
    /**
     * Adiciona um registro de interesse na lista
     * 
     * @param registroInteresse novo registro de interesse a ser adicionado.
     */
    public synchronized void adicionar(Object registroInteresse){
        lista.add(registroInteresse);
    }
    
    /**
     * Remove o primeiro registro de interesse da lista.
     * 
     * @return primeiro registro de interesse da lista.
     */
    public synchronized Object poll(){
        Object registroInteresse = lista.get(lista.size() -1);
        lista.remove(lista.size() -1);
        return registroInteresse;
    }
    
    /**
     * Retorna o primeiro registro de interesse da lista.
     * 
     * @return primeiro registro de interesse da lista.
     */
    public synchronized Object peek(){
        return lista.get(lista.size() -1);
    }
    
    /**
     * Verifica se a lista esta vazia.
     * 
     * @return se a lista esta varia.
     */
    public synchronized boolean isEmpty(){
        return lista.isEmpty();
    }
    
    /**
     * Retorna o registro de interesse na posição indicada.
     * 
     * @return registro de interesse da posição indicada.
     */
    public synchronized Object get(int i){
        return lista.get(i);
    }
    
    /**
     * Retorna o tamanho da lista.
     * 
     * @return tamanho da lista.
     */
    public synchronized int size(){
        return lista.size();
    }
    
     /**
     * Remove um registro da lista.
     * @param registroInteresse registro de interesse a ser removido.
     */
    public synchronized void remove(Object registroInteresse){
        lista.remove(registroInteresse);
    }
}
